<?php
/**
 * 缓存文件的简单类
 * 
 */
class Cache{

	private $dir="Storage";

	public function __construct(){
		if(!is_dir($this->dir)&&!mkdir($this->dir,0755,true)){
			throw new Exception("缓存目录创建失败");
		}
	}
	/**
	 * 获取缓存文件路径
	 * @param  [type] $name [缓存文件名]
	 * @return [type]       [缓存文件完整路径]
	 */
	private function getFile($name){
		return $this->dir.'/'.md5($name)."php";
	}
	/**
	 * 设置缓存文件
	 * @param  [type]  $name   [缓存文件名]
	 * @param  [type]  $data   [缓存数据]
	 * @param  integer $expire [缓存有效期]
	 * @return [type]          [description]
	 */
	public function cacheSet($name,$data,$expire=3600){
		//获取缓存的文件路径
		$filepath=$this->getFile($name);
		//缓存时间
		$expire=sprintf("%010d",$expire);
		$data="<?php\n//".$expire.serialize($data)."\n?>";
		//file_put_contents返回值:成功返回写入字符长度,失败返回false;
		return file_put_contents($filepath, $data);
	}

	public function cacheGet($name){
		$filepath=$this->getFile($name);
		if(!is_file($filepath)){
			return null;
		}
		$content=file_get_contents($filepath);
		//获取缓存过期时间
		$expire=intval(substr($content,8,10));
		/**判断思路
		 * 获取文件的修改时间
		 * 修改时间+缓存时间<当前时间,则删除缓存文件
		 */
		$etime=filemtime($filepath);
		if($expire>0&&$etime+$expire<time()){
			//删除缓存文件
			@unlink($filepath);
			return false;
		}
		return unserialize(substr($content, 18,-3));
	}

}

//类调用
$obj=new Cache();
$d=$obj->cacheSet('token','hello world');
$d=$obj->cacheGet('token');
